#include <iostream>
#include <regex>
#include <string>
#include <vector>
using namespace std;
//接受一个字符串 text 作为输入，并返回一个包含所有在文本中找到的电子邮件地址的 vector<std::string>
vector<std::string> extractEmails(const std::string &text)
{
    vector<string> emails;
    //定义正则表达式
    regex emailRegex(R"(([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}))");

    // words_begin：指向文本中第一个匹配正则表达式的子串。
    // words_end：作为结束标志，表示没有更多匹配项。
    // std::sregex_iterator 是C++标准库中用于遍历正则表达式匹配结果的迭代器。
    // 通过 std::sregex_iterator 完成正则表达式的匹配：
    auto words_begin = std::sregex_iterator(text.begin(), text.end(), emailRegex);
    auto words_end = std::sregex_iterator();

    //遍历所有匹配项并将它们添加到向量中
    for (std::sregex_iterator i = words_begin; i != words_end; ++i)
    { 
        // std::smatch match = *i;：
        // 解引用迭代器 i，获取当前匹配项的 std::smatch 对象。
        // std::smatch 是一个匹配结果对象，包含匹配的详细信息。
        std::smatch match = *i;
        // 调用 match.str() 方法，获取当前匹配项的字符串形式
        std::string match_str = match.str();
        emails.push_back(match_str);
    }
    return emails;
}
int main()
{
    string text;
    cout << "请输入一段文本: ";
    getline(cin, text);
    vector<string> emails = extractEmails(text);
    if (emails.empty())
    {
        cout << "未找到电子邮件地址。" << endl;
    }
    else
    {
        cout << "找到的电子邮件地址: " << endl;
        for (const auto &email : emails)
        {
            cout << email << endl;
        }
    }
    return 0;
}